package com.wk.springboot;

import com.wk.springboot.entity.Apple;
import com.wk.springboot.entity.Banana;
import com.wk.springboot.entity.Fruit;
import org.assertj.core.util.Lists;

import java.util.ArrayList;
import java.util.List;

public class PecsTest {
    public static void main(String[] args) {
        List<? extends Fruit> extendsList = getExtendsList();
        Apple apple = new Apple();
        Banana banana = new Banana();
        for (Fruit fruit : extendsList) {

        }
        System.out.println(extendsList);
    }

    // PECS 原则 消费者producer用extends  只能获取，不能往里面add
    // 如果能往里面add 会有什么问题? 如果原来的类型是Apple 你突然加一个Fruit进去 类型转换时就会有异常
    private static  List<? extends Fruit> getExtendsList() {
        List<? extends Fruit> list;
        Apple apple = new Apple();
        Banana banana = new Banana();
        list = new ArrayList<Fruit>();
        list = Lists.list(apple);
        list = Lists.list(banana);
        return list;
    }

    // 生成者consumer用super 只能往里面添加Fruit 或者其子类 （或者Object）
    //但获取的时候不能安全的获得特定的元素比如 apple 或者 fruit 只能获取到Object类型 所以所super的只能set
    private static <T extends Fruit> void setExtendsList(List<? super Fruit> list,T element) {
        Fruit object = (Fruit) list.get(0);
        list.add(element);
    }

}
